package demo7;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class Person {
    private String name;

    public Person(){
        System.out.println("Person的构造器执行了");
    }

    @Value("张三")
    public void setName(String name) {
        System.out.println("Person的name属性对应的setName方法调用了...");
        this.name = name;
    }

    /**
     * @PostConstruct注解是一个生命周期注解
     * Spring在将该对象初始化完毕(构造器执行后,set方法执行后)会调用该方法
     * 该方法的方法名任意定义,重点是标注注解
     */
    @PostConstruct
    public  void init(){
        System.out.println("Person对象被@PostConstruct标注的方法执行了...");
    }

    /**
     * @PreDestroy注解
     * 被该注解标注的方法的调用时机:
     * 当Spring容器关闭时，Spring容器会调用内部管理的对象的被@PreDestroy注解标注的方法
     */
    @PreDestroy
    public void preDestroy(){
        System.out.println("Person对象被@PreDestroy标注的方法执行了...");
    }



    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}
